package com.blog.utils;

import com.blog.constant.WebConst;
import com.vdurmont.emoji.EmojiParser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 公共函数
 *
 * @author wmb
 *
 * @date 2021-2-7
 */
@Component("commons")
public class Commons {

    /**
     * 获取随机数
     *
     * @param max
     * @param str
     *
     * @return
     */
    public static String random(int max, String str) {
        return UUID.random(1, max) + str;
    }

    public static String random(Long seed, int max, String str) {
        if (seed == null) {
            return random(max, str);
        }
        Random random = new Random(seed);
        return random.nextInt(max) + str;
    }

    /**
     * 返回github头像地址
     *
     * @param email
     *
     * @return
     */
    public static String gravatar(String email) {
        String avatarUrl = "https://github.com/identicons/";
        if (StringUtils.isBlank(email)) {
            email = "user@hanshuai.xin";
        }
        String hash = TaleUtils.MD5encode(email.trim().toLowerCase());
        return avatarUrl + hash + ".png";
    }

    /**
     * 网站链接
     *
     * @return
     */
    public static String siteUrl() {
        return siteUrl("");
    }

    /**
     * 返回网站链接下的全址
     *
     * @param sub 后面追加的地址
     *
     * @return
     */
    public static String siteUrl(String sub) {
        return siteOption("site_url") + sub;
    }

    /**
     * 网站配置项
     *
     * @param key
     *
     * @return
     */
    public static String siteOption(String key) {
        return siteOption(key, "");
    }

    /**
     * 网站配置项
     *
     * @param key
     * @param defaultValue 默认值
     *
     * @return
     */
    public static String siteOption(String key, String defaultValue) {
        if (StringUtils.isBlank(key)) {
            return "";
        }

        String str = WebConst.initConfig.get(key);
        if (StringUtils.isNotBlank(str)) {
            return str;
        } else {
            return defaultValue;
        }
    }

    /**
     * 格式化unix时间戳为日期
     *
     * @param unixTime
     *
     * @return
     */
    public static String formatDate(Date unixTime) {
        return formatDate(unixTime, "yyyy-MM-dd");
    }

    /**
     * 格式化unix时间戳为日期
     *
     * @param unixTime
     * @param patten
     *
     * @return
     */
    public static String formatDate(Date unixTime, String patten) {
        if (null != unixTime && StringUtils.isNotBlank(patten)) {
            return DateKit.formatDateByUnixTime(unixTime, patten);
        }
        return "";
    }

    /**
     * 英文格式的日期
     *
     * @param unixTime
     *
     * @return
     */
    public static String formatDateEn(Date unixTime){
        String formatDate = formatDate(unixTime, "d,MMM,yyyy");
        String[] dateArr = formatDate.split(",");
        return "<span>" + dateArr[0] + "</span> " + dateArr[1] + "  " + dateArr[2];
    }

    /**
     * 显示文章内容，转换markdown为html
     *
     * @param value
     *
     * @return
     */
    public static String article(String value) {
        if (StringUtils.isNotBlank(value)) {
            value = value.replace("<!--more-->", "\r\n");
            value = value.replace("<!-- more -->", "\r\n");
            return TaleUtils.mdToHtml(value);
        }
        return "";
    }


    /**
     * An :grinning:awesome :smiley:string &#128516;with a few :wink:emojis!
     * <p>
     * 这种格式的字符转换为emoji表情
     *
     * @param value
     *
     * @return
     */
    public static String emoji(String value) {
        return EmojiParser.parseToUnicode(value);
    }

    /**
     * 返回blog文章地址
     *
     * @param cid
     *
     * @return
     */
    public static String blogPermalink(Integer cid) {
        return siteUrl("/blog/article/" + cid.toString());
    }

    /**
     * 返回作品文章地址
     *
     * @param cid
     *
     * @return
     */
    public static String photoPermalink(Integer cid) {
        return siteUrl("/photo/article/" + cid.toString());
    }

    /**
     * 获取google网站验证码
     *
     * @return
     */
    public static String googleSiteVerification(){
        return siteOption("google_site_verification");
    }

    /**
     * 获取百度网站验证码
     *
     * @return
     */
    public static String baiduSiteVerification(){
        return siteOption("baidu_site_verification");
    }

    /**
     * 获取网站标题
     *
     * @return
     */
    public static String siteTitle() {
        return siteOption("site_title");
    }

    /**
     * 获取网站的备案信息
     *
     * @return
     */
    public static String siteRecord() {
        return siteOption("site_record");
    }

    /**
     * 获取社交的链接地址
     *
     * @return
     */
    public static Map<String, String> social() {
        final String prefix = "social_";
        Map<String, String> map = new HashMap<>();
        map.put("csdn", WebConst.initConfig.get(prefix + "csdn"));
        map.put("jianshu", WebConst.initConfig.get(prefix + "jianshu"));
        map.put("resume", WebConst.initConfig.get(prefix + "resume"));
        map.put("weibo", WebConst.initConfig.get(prefix + "weibo"));
        map.put("zhihu", WebConst.initConfig.get(prefix + "zhihu"));
        map.put("github", WebConst.initConfig.get(prefix + "github"));
        map.put("twitter", WebConst.initConfig.get(prefix + "twitter"));
        return map;
    }

    /**
     * 获取文章第一张图片
     *
     * @return
     */
    public static String showThumb(String content) {
        content = TaleUtils.mdToHtml(content);
        if (content.contains("<img")) {
            String img = "";
            String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
            Pattern p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
            Matcher m_image = p_image.matcher(content);
            if (m_image.find()) {
                img = img + "," + m_image.group();
                // 匹配src
                Matcher m = Pattern.compile("src\\s*=\\s*\'?\"?(.*?)(\'|\"|>|\\s+)").matcher(img);
                if (m.find()) {
                    return m.group(1);
                }
            }
        }
        return "";
    }


    /**
     * 如果blog没有配图，随机获取一张
     *
     * @return
     */
    public static String randomBlogPicture(Long seed){
        return "/site/images/blog-images/blog-" + random( seed,12,".jpg");
    }
}

